'\" t
.\" Copyright (C) 2001 Andries Brouwer <aeb@cwi.nl>.
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH unlocked_stdio 3 2024-05-02 "Linux man-pages 6.9.1"
.SH NAME
getc_unlocked, getchar_unlocked, putc_unlocked,
putchar_unlocked \- nonlocking stdio functions
.SH LIBRARY
Standard C library
.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <stdio.h>
.P
.BI "int getc_unlocked(FILE *" stream );
.B "int getchar_unlocked(void);"
.BI "int putc_unlocked(int " c ", FILE *" stream );
.BI "int putchar_unlocked(int " c );
.P
.BI "void clearerr_unlocked(FILE *" stream );
.BI "int feof_unlocked(FILE *" stream );
.BI "int ferror_unlocked(FILE *" stream );
.BI "int fileno_unlocked(FILE *" stream );
.BI "int fflush_unlocked(FILE *_Nullable " stream );
.P
.BI "int fgetc_unlocked(FILE *" stream );
.BI "int fputc_unlocked(int " c ", FILE *" stream );
.P
.BI "size_t fread_unlocked(void " ptr "[restrict ." size " * ." n ],
.BI "                      size_t " size ", size_t " n ,
.BI "                      FILE *restrict " stream );
.BI "size_t fwrite_unlocked(const void " ptr "[restrict ." size " * ." n ],
.BI "                      size_t " size ", size_t " n ,
.BI "                      FILE *restrict " stream );
.P
.BI "char *fgets_unlocked(char " s "[restrict ." n "], int " n \
", FILE *restrict " stream );
.BI "int fputs_unlocked(const char *restrict " s ", FILE *restrict " stream );
.P
.B #include <wchar.h>
.P
.BI "wint_t getwc_unlocked(FILE *" stream );
.B "wint_t getwchar_unlocked(void);"
.BI "wint_t fgetwc_unlocked(FILE *" stream );
.P
.BI "wint_t fputwc_unlocked(wchar_t " wc ", FILE *" stream );
.BI "wint_t putwc_unlocked(wchar_t " wc ", FILE *" stream );
.BI "wint_t putwchar_unlocked(wchar_t " wc );
.P
.BI "wchar_t *fgetws_unlocked(wchar_t " ws "[restrict ." n "], int " n ,
.BI "                      FILE *restrict " stream );
.BI "int fputws_unlocked(const wchar_t *restrict " ws ,
.BI "                      FILE *restrict " stream );
.fi
.P
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.P
.BR \%getc_unlocked (),
.BR \%getchar_unlocked (),
.BR \%putc_unlocked (),
.BR \%putchar_unlocked ():
.nf
    /* glibc >= 2.24: */ _POSIX_C_SOURCE >= 199309L
        || /* glibc <= 2.23: */ _POSIX_C_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
.fi
.P
.BR \%clearerr_unlocked (),
.BR \%feof_unlocked (),
.BR \%ferror_unlocked (),
.BR \%fileno_unlocked (),
.BR \%fflush_unlocked (),
.BR \%fgetc_unlocked (),
.BR \%fputc_unlocked (),
.BR \%fread_unlocked (),
.BR \%fwrite_unlocked ():
.nf
    /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
.fi
.P
.BR \%fgets_unlocked (),
.BR \%fputs_unlocked (),
.BR \%getwc_unlocked (),
.BR \%getwchar_unlocked (),
.BR \%fgetwc_unlocked (),
.BR \%fputwc_unlocked (),
.BR \%putwchar_unlocked (),
.BR \%fgetws_unlocked (),
.BR \%fputws_unlocked ():
.nf
    _GNU_SOURCE
.fi
.SH DESCRIPTION
Each of these functions has the same behavior as its counterpart
without the "_unlocked" suffix, except that they do not use locking
(they do not set locks themselves, and do not test for the presence
of locks set by others) and hence are thread-unsafe.
See
.BR flockfile (3).
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lb lb lbx
l l l.
Interface	Attribute	Value
T{
.na
.nh
.BR getc_unlocked (),
.BR putc_unlocked (),
.BR clearerr_unlocked (),
.BR fflush_unlocked (),
.BR fgetc_unlocked (),
.BR fputc_unlocked (),
.BR fread_unlocked (),
.BR fwrite_unlocked (),
.BR fgets_unlocked (),
.BR fputs_unlocked (),
.BR getwc_unlocked (),
.BR fgetwc_unlocked (),
.BR fputwc_unlocked (),
.BR putwc_unlocked (),
.BR fgetws_unlocked (),
.BR fputws_unlocked ()
T}	Thread safety	T{
.na
.nh
MT-Safe race:stream
T}
T{
.na
.nh
.BR getchar_unlocked (),
.BR getwchar_unlocked ()
T}	Thread safety	T{
.na
.nh
MT-Unsafe race:stdin
T}
T{
.na
.nh
.BR putchar_unlocked (),
.BR putwchar_unlocked ()
T}	Thread safety	T{
.na
.nh
MT-Unsafe race:stdout
T}
T{
.na
.nh
.BR feof_unlocked (),
.BR ferror_unlocked (),
.BR fileno_unlocked ()
T}	Thread safety	MT-Safe
.TE
.SH STANDARDS
.TP
.BR getc_unlocked ()
.TQ
.BR getchar_unlocked ()
.TQ
.BR putc_unlocked ()
.TQ
.BR putchar_unlocked ()
POSIX.1-2008.
.TP
Others:
None.
.SH HISTORY
.TP
.BR getc_unlocked ()
.TQ
.BR getchar_unlocked ()
.TQ
.BR putc_unlocked ()
.TQ
.BR putchar_unlocked ()
POSIX.1-2001.
.\" E.g., in HP-UX 10.0. In HP-UX 10.30 they are called obsolescent, and
.\" moved to a compatibility library.
.\" Available in HP-UX 10.0: clearerr_unlocked, fclose_unlocked,
.\" feof_unlocked, ferror_unlocked, fflush_unlocked, fgets_unlocked,
.\" fgetwc_unlocked, fgetws_unlocked, fileno_unlocked, fputs_unlocked,
.\" fputwc_unlocked, fputws_unlocked, fread_unlocked, fseek_unlocked,
.\" ftell_unlocked, fwrite_unlocked, getc_unlocked, getchar_unlocked,
.\" getw_unlocked, getwc_unlocked, getwchar_unlocked, putc_unlocked,
.\" putchar_unlocked, puts_unlocked, putws_unlocked, putw_unlocked,
.\" putwc_unlocked, putwchar_unlocked, rewind_unlocked, setvbuf_unlocked,
.\" ungetc_unlocked, ungetwc_unlocked.
.SH SEE ALSO
.BR flockfile (3),
.BR stdio (3)
